Test Step
 
Test Step Id:TS_inquiry_hopp_sequence_79_p_lc (var_lap:LAP; var_n_inquiry:INTEGER; var_tso_id:TSO_ID)var_tso_id:TSO_ID; var_inquiryTO:INTEGER)
Test Step Group Ref:INQ/
Objective: 
Defaults:DF_termination_p_lc, DF_every_packet_allowed_p_lc
Comments:used in the following test case:
TC/PHYS/INQ/BV-01
The link_number in LC_PL_DATA_IND is set to "?" since it is not known in this stage.

Counting of the minimum required number of ID packets in A and B train.
The IUT uses the estimate CLKN of the tester and because of this the tester does not know exactly the sequence of the IUT when it starts inquiry. The tester therefore waits for the first ID-packet on its defined first inquiry frequency (TSC_start_scan_offset) to syncronize on the IUT. Afterwards the tester follows the inquiry sequence of the IUT
var_n_inquiry defines the number of train repetitions.
The minimum required number of ID packets is (var_n_inquiry) * 16. Since the tester does not syncronize on the first possible page frequency, the minimum number is reduced (the tester starts at K-x instead of k-8)var_inquiryTO indicates the inquiry length in slots
 
Nr Label Behaviour Description Constraint Ref Verdict Comments
1   CP_LC ? CM_CONTINUE Cm_start_inquiry   Start inquiry scan in PLC component
2    CP_LC ! CM_CONTINUE Cm_start_inquiry   this message is used to notify P_TCI that can start inquiry procedure
3      (TCV_id_packet_iac := TSO_get_id_packet (var_lap))     get preamble and sync word for the ID packet used during inquiry
4      (TCV_inquiry_instance_counter := 0,
TCV_train_counter := 0, TCV_exit:= 0)

    initialisation of counters
5       +LTS_scan_a_train
     
6      (TCV_train_counter := 0, TCV_exit:= 0)
    initialisation of counters
7       START T_guard_var(60)
    used to exit if the first ID packet in the A train is not received. It will be cancelled after receiving this packet
8        PL ? LC_PL_DATA_IND
(TCV_start_inquiry := BIT_TO_INT(LC_PL_DATA_IND.clk), TCV_start_time:=TCV_start_inquiry,TCV_inquiry_counter := 1)
CANCEL T_guard_var

Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_a_train, TSC_lc_id_pac, TCV_id_packet_iac)
  The first ID packet on A train triggers the test to start counting and stores the time stamp
9         REPEAT LTS_monitor_continous_train(TSC_a_train) UNTIL
[(TCV_inquiry_counter >= (( var_n_inquiry * 16) - (16 - TSC_start_scan_offset))) OR (TCV_exit <> 0)]

    count only reduced number of packets
10 TS01       [TCV_exit <> 0]
  (F) A train was not successfull(timeout occured or the required number was not reached)
11          CP_LC ! CM_CONTINUE
Cm_terminate_other_ptc    
12 TS02
      [TCV_exit = 0]
  (P)
A train was successfull
13         (TCV_start_time_1st_train_packet := TCV_start_inquiry_time_stamp)
    store the time stamp of the first ID packet of the last train
14          +LTS_scan_b_train
     
15 TS03
        [TCV_exit <> 0]
  (F)
B train was not successfull (timeout occured or the required number was not reached
16            CP_LC ! CM_CONTINUE
Cm_terminate_other_ptc
   
17 TS04
        [TCV_exit = 0]
  (P)
B train was successfull
18 TS05
         [((TCV_next_slot_id_packet - TCV_same_slot_id_packet) <= TSC_maximum_difference)
AND
(( TCV_next_slot_id_packet - TCV_same_slot_id_packet) <= TSC_maximum_difference)]

  (P)
Check if IUT used two ID packets in the same slot. The absolute difference between the number of ID packets in the same slot and the number of ID packets in different slots shall be less or equal TSC_maximum_difference
19 TS02
        [((TCV_next_slot_id_packet=((TCV_inquiry_counter/2)-1)) OR (TCV_next_slot_id_packet=(TCV_inquiry_counter/2))) AND ((TCV_same_slot_id_packet=((TCV_inquiry_counter/2)-1)) OR (TCV_same_slot_id_packet=(TCV_inquiry_counter/2)))]
  (P)
The counters TCV_next_slot_id_packet and TCV_same_slot_id_packet should be equal to (TCV_inquiry_counter/2) but taking into account that the frecuency f(k-6) can be first/secons slot:
- If it is a first half slot:
(TCV_next_slot_id_packet= TCV_inquiry_counter/2)) AND ( TCV_next_slot_id_packet=(TCV_inquiry_counter/2)-1)
- If it is a second half slot:
(TCV_next_slot_id_packet= (TCV_inquiry_counter/2)-1) AND ( TCV_next_slot_id_packet=TCV_inquiry_counter/2)

20            (TCV_subsequent_train_counter:=1)
     
21             +LTS_continue_next_sequences     the test case continues
22 TS06
         [NOT((( TCV_next_slot_id_packet - TCV_same_slot_id_packet) <= TSC_maximum_difference)
AND
(( TCV_next_slot_id_packet - TCV_same_slot_id_packet) <= TSC_maximum_difference))]

  (F)
absolute difference is too big
23 TS03
        [TRUE]
  (F)
 
24              CP_LC ! CM_CONTINUE
Cm_terminate_other_ptc    
25 TS04
    ? TIMEOUT T_guard_var
  (F)
First ID packet of A-train is not received
26        CP_LC ! CM_CONTINUE
Cm_terminate_other_ptc
   
LTS_continue_next_sequences
27   (TCV_time_diff:=TSO_get_time_diff( TCV_start_time_1st_train_packet, TCV_start_inquiry_time_stamp, TSC_flag_clk_resolution))
    calculate the time distance between the first A and the first B train ..
28    (TCV_time_distance_ab_train := TCV_time_diff + (16 - TSC_start_scan_offset) * 2, TCV_subsequent_train_counter := 2)
    ..and store this time distance adding the first missing half slots of train A;
2 trains have been received

29     (TCV_start_time_1st_train_packet := TCV_start_inquiry_time_stamp)
    store the time stamp of the first ID packet of the last train
30      REPEAT LTS_scan_next_train UNTIL [(TCV_inquiry_instance_counter >= 5) OR (TCV_exit <> 0)]
    scan all other trains until 5 inquiry instances have been scanned
31 TS07
    [TCV_exit <> 0]
  (F)
errors occured
32   REPEAT LTS_scan_next_train UNTIL [(TCV_exit <> 0)]
     
33    [TCV_exit = 3]
    all trains were successfull
34     (TCV_inquiry_length:=TSO_get_time_diff(TCV_start_inquiry, TCV_start_time, TSC_clk_resolution) * 2)
     
35 TS05
   [(TCV_subsequent_train_counter>=4) AND (TCV_inquiry_length<=var_inquiryTO)]
  (P)
 
36 TS06
   [TRUE]
  (F)
 
37 TS07
 [TRUE]
  (F)
errors occured
38         CP_LC ! CM_CONTINUE
Cm_terminate_other_ptc    
39 TS08
    [TCV_exit = 0]
  (P)
all trains were successfull
LTS_scan_next_train
40   [(TCV_train_counter MOD 2) = 0]
    if the value of the counter is even, train A will be scanned
41    +LTS_scan_a_train
     
42     +LTS_continue_scanning
     
43   [(TCV_train_counter MOD 2) = 1]
    if the value of the counter is odd train B will be scanned
44    +LTS_scan_b_train
     
45     +LTS_continue_scanning
     
46   [(TCV_subsequent_train_counter MOD 2) = 0]
    if the value of the counter is even, train A will be scanned
47    +LTS_scan_train(TSC_a_train)
     
48   [(TCV_subsequent_train_counter MOD 2) = 1]
    if the value of the counter is odd train B will be scanned
49    +LTS_scan_train(TSC_b_train)
     
LTS_continue_scanning
50   [TCV_exit <> 0]
    error in train
51   [TCV_exit = 0]
    train was successfull
52    (TCV_time_diff:=TSO_get_time_diff( TCV_start_time_1st_train_packet, TCV_start_inquiry_time_stamp, TSC_clk_resolution))
    calculate the time distance between the last and the train before
53     (TCV_start_time_1st_train_packet := TCV_start_time, TCV_train_counter := TCV_train_counter + 1)
    update timestamp and counter
54      [((TCV_time_diff - TCV_time_distance_ab_train) < 6) AND ((TCV_time_distance_ab_train - TCV_time_diff) < 6)]
    the time difference between the first A train and the first B train is nearly the same ( < 6 half slots) to the time difference between the last and the train before. The last train belongs to the old inquiry instance (precondition is that the instance finishes with a B train, so that A and B train continuosly change.
55       (TCV_subsequent_train_counter := TCV_subsequent_train_counter + 1)
     
56      [((TCV_time_diff - TCV_time_distance_ab_train) > 6) OR ((TCV_time_distance_ab_train - TCV_time_diff) > 6)]
    the time difference between the first A train and the first B train is different ( > 6 half slots) to the time difference between the last and the train before. It must be the beginning of a new instance.
57 TS09
    [TCV_subsequent_train_counter < 4]
  (F)
less than 4 trains have been received in one inquiry instance
58        (TCV_exit:=1)
     
59 TS10
    [TCV_subsequent_train_counter >= 4]
  (P)
 
60        (TCV_inquiry_instance_counter := TCV_inquiry_instance_counter + 1)
    next instance
61         (TCV_subsequent_train_counter := 1)
    start counting next four subsequent trains; the last train alredy belongs to the new instance
LTS_scan_a_train
62   START T_guard_var(60)
    used to exit the test step if the first ID packet in the A train is not received. It will be cancelled after receiving this packet
63    +LTS_monitor_first_a_train
    trigger the first ID Packet on the A train
64     [TCV_exit <> 0]
    first ID packet in A train not found
65     [TCV_exit = 0]
    first ID packet in A train found
66      REPEAT LTS_monitor_continous_a_train UNTIL
[(TCV_inquiry_counter >= (( var_n_inquiry * 16) - (16 - TSC_start_scan_offset))) OR (TCV_exit <> 0)]

    count only reduced number of packets
67       [TCV_exit <> 0]
    A train was not successfull (timeout occured or the required number was not reached)
68       [TCV_exit = 0]
    A train was successfull
LTS_scan_b_train
69   +LTS_monitor_first_b_train
    trigger the first ID Packet on the B train
70    [TCV_exit <> 0]
    first ID packet in B train not found
71    [TCV_exit = 0]
    first ID packet in B train found
72     REPEAT LTS_monitor_continous_b_train UNTIL
[(TCV_inquiry_counter >= (var_n_inquiry* 16)) OR (TCV_exit <> 0)]

    Because at this time the tester knows the exact sequence it will now completely count the required number of ID-packets
73      [TCV_exit <> 0]
    B train was not successfull (timeout occured or the required number was not reached
74      [TCV_exit = 0]
    B train was successfull
LTS_monitor_first_a_train
75   ACTIVATE (DF_termination_p_lc, DF_every_packet_allowed_p_lc)
     
76    (TCV_inquiry_counter := 0)
     
77     PL ? LC_PL_DATA_IND
(TCV_start_time := BIT_TO_INT(LC_PL_DATA_IND.clk), TCV_start_inquiry_time_stamp := BIT_TO_INT(LC_PL_DATA_IND.clk))
CANCEL T_guard_var

Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_a_train, TSC_lc_id_pac, TCV_id_packet_iac)
  The first ID packet on A train triggers the test to start counting and stores the time stamp
78      (TCV_inquiry_counter := TCV_inquiry_counter + 1)
    count the first ID packet
79     ?TIMEOUT T_guard_var
    first ID packet not received
80      (TCV_exit := 2)
    cancel test
LTS_monitor_first_b_train
81   ACTIVATE (DF_termination_p_lc, DF_every_packet_allowed_p_lc)
     
82    (TCV_inquiry_counter := 0)
    delete counter
83     PL ? LC_PL_DATA_IND
(TCV_start_time := BIT_TO_INT(LC_PL_DATA_IND.clk), TCV_start_inquiry_time_stamp := BIT_TO_INT(LC_PL_DATA_IND.clk))

Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_b_train, TSC_lc_id_pac, TCV_id_packet_iac)
  The first ID packet of the B train triggers the test to start counting and stores the time stamp
84      (TCV_inquiry_counter := TCV_inquiry_counter +1)
    count the first ID packet
LTS_monitor_continous_a_train
85   ACTIVATE (DF_termination_p_lc, DF_otherwise_fail_p_lc)
     
86    PL ? LC_PL_DATA_IND
(TCV_time_stamp := BIT_TO_INT(LC_PL_DATA_IND.clk))

Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_a_train, TSC_lc_id_pac, TCV_id_packet_iac)
  waiting for next A train ID packet
87     (TCV_inquiry_counter := TCV_inquiry_counter +1)
    increment counter
88      +TS_verify_time_distance(TCV_start_time, TCV_time_stamp)
    check if ID packet followed the previous one in the same or in the next but one slot
89       (TCV_start_time := TCV_time_stamp)
    prepare counter for next occurrence
90    PL ? LC_PL_DATA_IND
Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_b_train, TSC_lc_id_pac, TCV_id_packet_iac)
  B train shall not be received when scanning for A train
91     (TCV_exit := 1)
    not expected B train occured
LTS_monitor_continous_b_train
92   ACTIVATE (DF_termination_p_lc, DF_otherwise_fail_p_lc)
     
93    PL ? LC_PL_DATA_IND
(TCV_time_stamp := BIT_TO_INT(LC_PL_DATA_IND.clk))

Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_b_train, TSC_lc_id_pac, TCV_id_packet_iac)
  waiting for next B train ID packet
94     (TCV_inquiry_counter := TCV_inquiry_counter +1)
    increment counter
95      +TS_verify_time_distance(TCV_start_time, TCV_time_stamp)
    check if ID packet followed the previous one in the same or in the next but one slot
96       (TCV_start_time := TCV_time_stamp)
    prepare counter for next occurrence
97    PL ? LC_PL_DATA_IND
Lc_pl_data_ind_id_packet( ?, var_tso_id, TSC_a_train, TSC_lc_id_pac, TCV_id_packet_iac)
  A train shall not be received when scanning for B train
98     (TCV_exit := 1)
    not expected A train occured
LTS_scan_train(var_train:PACKET_INFO)
99   +LTS_monitor_first_id(var_train)
    trigger the first ID Packet on the train
100    [TCV_exit <> 0]
    first ID packet in train not found
101    [TCV_exit = 0]
    first ID packet in train found
102     REPEAT LTS_monitor_continous_train(var_train) UNTIL
[(TCV_inquiry_counter >= ( var_n_inquiry * 16)) OR (TCV_exit <> 0)]

    Because at this time the tester knows the exact sequence it will now completely count the required number of ID-packets
103      [TCV_exit <> 0]
    train was not successfull (timeout occured or the required number was not reached)
104      [TCV_exit = 0]
    train was successfull
105 TS08
    [((TCV_next_slot_id_packet=((TCV_inquiry_counter/2)-1)) OR (TCV_next_slot_id_packet=(TCV_inquiry_counter/2))) AND ((TCV_same_slot_id_packet=((TCV_inquiry_counter/2)-1)) OR (TCV_same_slot_id_packet=(TCV_inquiry_counter/2)))]
  (P)
The counters TCV_next_slot_id_packet and TCV_same_slot_id_packet should be equal to (TCV_inquiry_counter/2) but taking into account that the frecuency f(k-6) can be first/secons slot:
- If it is a first half slot:
(TCV_next_slot_id_packet= TCV_inquiry_counter/2)) AND ( TCV_next_slot_id_packet=(TCV_inquiry_counter/2)-1)
- If it is a second half slot:
(TCV_next_slot_id_packet= (TCV_inquiry_counter/2)-1) AND ( TCV_next_slot_id_packet=TCV_inquiry_counter/2)

106        (TCV_subsequent_train_counter:=TCV_subsequent_train_counter+1)
     
107 TS09
    [TRUE]
  (F)
 
108        CP_LC ! CM_CONTINUE
Cm_terminate_other_ptc
   
LTS_monitor_first_id(var_train:PACKET_INFO)
109   ACTIVATE (DF_termination_p_lc, DF_every_packet_allowed_p_lc)
     
110    (TCV_inquiry_counter := 0)
    delete counter
111     PL ? LC_PL_DATA_IND
(TCV_start_time := BIT_TO_INT(LC_PL_DATA_IND.clk))

Lc_pl_data_ind_id_packet( ?, var_tso_id, var_train, TSC_lc_id_pac, TCV_id_packet_iac)
  The first ID packet of the train triggers the test to start counting and stores the time stamp
112      (TCV_inquiry_counter := TCV_inquiry_counter +1)
    count the first ID packet
113     PL ? LC_PL_DATA_REQ
Lc_pl_data_req (TSC_lc_poll_pac, Lc_any_acl_pdu(Packet_header(?,TSC_poll_packet, ?, ?, ?)))
  POLL packet to indicate the end of the test procedure
114      (TCV_exit:=3)
     
LTS_monitor_continous_train(var_train:PACKET_INFO)
115   ACTIVATE (DF_termination_p_lc, DF_otherwise_fail_p_lc)
     
116    PL ? LC_PL_DATA_IND
(TCV_time_stamp := BIT_TO_INT(LC_PL_DATA_IND.clk))

Lc_pl_data_ind_id_packet( ?, var_tso_id, var_train, TSC_lc_id_pac, TCV_id_packet_iac)
  waiting for next train ID packet
117     (TCV_inquiry_counter := TCV_inquiry_counter +1)
    increment counter
118      +TS_verify_time_distance(TCV_start_time, TCV_time_stamp)
    check if ID packet followed the previous one in the same or in the next but one slot
119       (TCV_start_time := TCV_time_stamp)
    prepare counter for next occurrence
120    PL ? LC_PL_DATA_IND
Lc_pl_data_ind_id_packet( ?, var_tso_id, COMPLEMENT(var_train), TSC_lc_id_pac, TCV_id_packet_iac)
  A packet of the other train shall not be received when scanning for current train
121     (TCV_exit := 1)
     
122    PL ? LC_PL_DATA_REQ
Lc_pl_data_req (TSC_lc_poll_pac, Lc_any_acl_pdu(Packet_header(?,TSC_poll_packet, ?, ?, ?)))
  POLL packet to indicate the end of the test procedure
123     (TCV_exit:=3)
     
 
Detailed Comment: 
Generated by Leonardo Delta 1.06 (Da Vinci Communications Ltd)